export type MembeRole = 'onlooker' | 'member' | 'owner';
export type DocPermission = 'view' | 'edit';

// 🆕 项目角色（预定义）
export type ProjectRole =
  | 'owner' // 所有者 - 完全权限
  | 'maintainer' // 维护者 - 发布、导出、成员管理
  | 'developer' // 开发者 - 编辑、创建、删除文件
  | 'frontend-dev' // 前端开发者 - 前端完全访问，后端只读
  | 'backend-dev' // 后端开发者 - 后端完全访问，前端可调试不可查看源码
  | 'fullstack-dev' // 全栈开发者 - 前后端完全访问
  | 'tester' // 测试工程师 - 只能编辑测试文件
  | 'designer' // UI设计师 - 只能编辑样式和资源
  | 'intern' // 实习生 - 只能编辑测试文件，其他只读
  | 'guest' // 访客 - 只读
  | 'custom'; // 自定义 - 使用自定义策略

// 🆕 操作类型
export type Action =
  // 基础操作
  | 'view' // 查看（元数据）
  | 'run' // 运行/执行
  | 'debug' // 调试
  // 源代码操作
  | 'source:view' // 查看源代码
  | 'source:edit' // 编辑源代码
  | 'source:export' // 导出源代码
  // 编辑操作
  | 'create' // 创建
  | 'update' // 更新
  | 'delete' // 删除
  | 'move' // 移动
  | 'copy' // 复制
  // 发布操作
  | 'publish' // 发布
  | 'unpublish' // 取消发布
  // 权限操作
  | 'grant' // 授权
  | 'revoke'; // 撤销

// 🆕 权限策略
export interface PermissionPolicy {
  id: string;
  name: string;
  description?: string;

  // 资源路径模式
  pathPattern: string; // 如：'/src/modules/user-management/**'

  // 允许的操作
  actions: Action[];

  // 明确拒绝的操作
  deniedActions?: Action[];

  // 优先级（数字越大优先级越高）
  priority: number;

  // 条件（可选）
  conditions?: {
    timeRange?: {
      start: number;
      end: number;
    };
    ipWhitelist?: string[];
    environment?: string[]; // ['dev', 'staging', 'prod']
  };

  // 元数据
  createdBy: number;
  createdAt: number;
  expiresAt?: number; // 过期时间
}

export class LcProjectMember {
  userId: number;
  inviteBy?: number;
  inviteAt?: number;

  // 保留旧字段（向后兼容）
  documentRole?: MembeRole;
  documentPermission?: DocPermission;

  canSetDocPermissions?: DocPermission[];
  permissions?: {
    canSetRoles?: MembeRole[];
    canSetDocPermissions?: DocPermission[];
    deleteMember?: boolean;
    renameMember?: boolean;
  };

  // 🆕 新增字段
  role?: ProjectRole; // 预定义角色
  policies?: PermissionPolicy[]; // 自定义策略（role='custom'时使用）

  name?: string;
  avatar?: string;
}

const data = {
  IsPublic: false,
  allowCopy: true,
  allowCopyRole: 'member',
  confirmList: [
    {
      inviteId: 'b0fee88d-1d99-4dda-ac7c-f81a2628bac6',
      email: '',
      phoneNumber: '17312869181',
      roleName: 'member',
      userId: 68231074659663,
      name: '173****9181',
      avatar: '',
      job: '',
      role: 'member',
      permissions: {
        canSetRoles: ['onlooker', 'member'],
        canSetDocPermissions: ['view', 'edit'],
        deleteMember: true,
        renameMember: false,
      },
      documentPermission: 'edit',
    },
  ],
  cover: '55313801117154/55313801117156/CF0611159517F7D227E71B4342B9BF83.png',
  createAt: '2023-06-27T16:01:22.912001Z',
  creatorID: 55313801117153,
  id: 98086401974112,
  isShared: false,
  isTeamLib: false,
  members: [],
  name: '新文件',
  owner: {
    id: 55313801117153,
    name: '富贵居士',
    avatar: '',
    email: null,
    job: 'owner',
    role: '',
    documentRole: 'owner',
    createAt: '2022-03-12T13:09:11.473989Z',
    updateAt: '2022-07-06T08:21:13.845948Z',
    isInTeam: false,
    permissions: {
      canSetRoles: null,
      canSetDocPermissions: null,
      deleteMember: false,
      renameMember: false,
    },
    documentPermission: '',
    extraEditor: false,
  },
  ownerAvatar: null,
  ownerName: null,
  ownerNickname: null,
  permissions: null,
  projectId: 55313801117156,
  roleName: 'owner',
  teamId: 55313801117154,
  updateAt: '2023-06-27T17:34:22.840865Z',
  updateUserName: '富贵居士',
};
